创新点
- 对于WIDER FACE数据集,手动标记五个landmark坐标,这种额外监督信息对于hard face detection的性能提升有巨大的作用。
- 在已有的监督分支下,并行的新增了一个额外的自监督mesh decoder分支,用于预测pixel-wise 3D shape人脸信息。
- 基于单阶段目标检测框架,提出了一种新的人脸检测方法RetinaFace,该方法采用多任务学习策略来同时预测face score、face box、five landmarks以及每个人脸像素的三维位置和对应关系
- 在WIDER FACE hard测试集中,RetinaFace的AP比现有的最好方法提升了1.1%,达到了91.4%。
- 通过使用轻量级的backbone,对于VGA分辨率的图片,RetinaFace能够在单CPU下实现real-time的速度。
基础知识
face localisation定义
狭义上的face localisation的定义是传统意义上的face detection。广义上的face localisation包括了face detection、face alignment、pixel-wise face parsing、3D dense correspondence regression。
人脸检测和通用目标检测
人脸检测和一般的目标检测有如下几个不同点:
- 长宽比例变化范围小,从1:1变化到1:1.5。
- 尺度变化范围大,从几像素到几千像素。
双阶段和单阶段
双阶段的方法使用了“proposal and refinement”机制可以获得更高的定位精度。与此相反,单阶段方法的密集采样,导致训练过程中正负样本的极度不平衡。为了解决这种不平衡,sampling(online hard example mining)和re-weighting(focal loss)被广泛的使用。跟双阶段的方法相比,单阶段方法的速度更快,有更高的recall,但是也有更高的false positive概率(因为负样本数目远远大于正样本数目),因此定位精度并不是很高。
context module
为了增强模型检测极小人脸的上下文推理能力,SSH和PyramidBox在特征金字塔上应用context module来扩大感受野。为了增强CNN的非刚性变换建模能力,可变形卷积网络(DCN)采用了一种新的可变形层来模拟几何变换。WIDER Face Challenge2018的冠军解决方案表明刚性(扩展)和非刚性(变形)上下文建模是互补和正交的,可以提高人脸检测的性能。
创新点来源
根据前人的研究,额外的landmark信息能够帮助模型获得更好的检测性能,但是是否能够改善tiny face detection的性能,前人并没有研究。因此,是否能够利用五个人脸关键点信息提升WIDER FACE hard test数据集的性能呢?
另外,Mask-RCNN通过在现有的分支基础上,并行的新增了一个预测object mask的分支,这极大地提升检测性能。这更加能够让人确信,dense pixel-wise annotations确实能够有助于提升检测性能。但是不可能在WIDER FACE数据集数据集上添加dense face annotation的信息。因此,既然监督信息不容易获得,那么是否能够使用无监督的方法进一步提升检测器的性能呢?
FAN提出了利用anchor-level attention map去提升遮挡人脸检测的性能。但是the proposed attention map特别粗糙不包含任何语义信息。最近自监督3D morphable models 在3D人脸建模上取得了巨大的进步。特别是Mesh Docoder利用在joint shape和texture上的图卷积取得了real-time的速度。然而,将该方法应用到单阶段目标检测器上的挑战有:一是相机参数难以精确地评估;二是采用单一特征向量(特征金字塔上1×1Conv)来预测joint latent shape和texture,而不是RoI pooled feature,这带来了feature shift的风险。本文在现有分支的基础上,并行的新增了一个额外的自监督mesh decoder分支,用于预测pixel-wise 3D shape人脸信息。
本文继续采用单阶段检测的思想,借助于强监督和自监督的信息,提出multi-loss,得到了一个SOTA的方法——RetinaFace。本文的核心思想如下图所示:
主要内容
网络结构
如下图为RetinaFace的结构图,左半边部分就没什么好说的了,这里重点说下右边的context module。
该模块的主要作用是增加感受视野并增强了刚性上下文建模能力(enhance the rigid context modelling power)。Context Module(x5)的含义是针对每一个feature pyramid level都有一个对应的context module,也就是说feature pyramid levels之间不共享context module。该模块的结构为:输入通道数为256的Tensor,经过三个通道数分别为128、64、64的$3 \times 3$卷积层,这3个卷积层的感受视野分别为$3\times3,5\times5,7\times7$。然后将三个卷积层的输出沿着channel重新拼接成通道数为256的tensor。
Multi-task Loss
对于每个anchor $i$,最小化下面的multi-task loss:
(1)Face分类损失$L_{cls}(p_i, p_i^)$,其中$p_i$是anchor $i$是人脸的预测概率。对于positive anchor,$p_i^=1$;对于negative anchor,$p_i^*=0$。分类损失$L_{cls}$是二分类(face/not face)softmax损失。
(2)Face定位回归损失$L_{box}(t_i,t_i^)$,其中$t_i=\{t_x,t_y,t_w,t_h\}_i$,$t_i^=\{t_x^,t_y^,t_w^,t_h^\}_i$分别表示预测出的box坐标和对应的positive anchor的ground-truth box坐标。根据Fast r-cnn,将box回归目标(如中心坐标、宽高)标准化。计算损失时使用$L_{box}(t_i,t_i^)=R(t_i-t_i^)$,其中$R$是在Fast r-cnn中定义的smooth-$L_1$损失。
(3)人脸landmark回归损失$L_{pts}(l_i,l_i^)$,其中$l_i=\{l_{x_1},l_{y_1},\cdots,l_{x_5},l_{y_5}\}_i$,$l_i^=\{l_{x_1}^,l_{y_1}^,\cdots,l_{x_5}^,l_{y_5}^\}_i$,分别表示预测出的五个人脸landmark和对应的positive anchor的ground-truth。跟box centre回归相似,五个人脸landmark回归也采用了基于anchor centre的target normalisation。
(4)Dense回归损失$L_{pixel}$。
其中loss-balancing参数$\lambda_1-\lambda_3$被设置为0.25,0.1和0.01,这意味着监督信息得到的box和landmark回归损失重要性比较大。
Dense Regression Branch
这部分讲道理我看的不是很明白,虽然我研究的就是GNN,23333。但是感觉要想理解这个模块,需要了解3D建模的一些知识。总而言之,这个模块的主要流程是:就是将2D的人脸映射到3D模型上,再将3D模型解码为2D图片,然后计算经过编解码的图片和原始图片的差别。中间用到了图卷积。
这里实际上用到了mesh decoder来做解码,mesh decoder是一种基于图卷积的方法,参数量会比我们平时用的普通2D卷积计算量要少。如下图,我们知道普通的卷积操作参数一般是$Kernel_H \times Kernel_w \times Channel_{in} \times Channel_{out}$,而图卷积在计算参数的时候,参数量只有$K \times Channel_{in} \times Channel_{out}$,$K$表示$K$阶切比雪夫多项式。
当预测出形状和纹理参数$P_{ST} \in {\mathbb R}^{128}$后,使用一个高效的可微分3D网格渲染器利用相机参数和光照参数将coloured-mesh $D_{P_{ST}}$投影到2D图像平面上。一旦得到了rendered 2D face ${\cal R}({\cal D_{P_{ST}}}, P_{cam}, P_{ill})$后,我们使用以下函数比较rendered 2D face和原始2D face的像素差异:
其中,$W、H$是anchor $I_{i,j}^*$的宽和高。
实验
数据集
WIDER FACE由香港中文大学于2016年建立,该数据集包含32203张图像,393703个人脸,其中大量图片受到光照、遮挡、化妆、表情变化、小脸等因素影响。这些数据中40%为训练集(Training)、10%为验证集(Validation)、50%为测试集(Testing)。WIDER FACE一经提出,便引起了广泛关注,成为近几年来人脸检测领域最权威的数据集之一。WIDER FACE数据集分为Validation和Test两个评估集,每个集合中的数据根据人脸检测的难易程度分为Easy、Medium、Hard。
FDDB(Face Detection Data Set and Benchmark)由美国马萨诸塞大学(UMass)于2010年建立,该数据集包含2845张图像,5171个人脸。其中包含大量遮挡、复杂的姿态以及低分辨率的人脸。结果公布分为公开方法(published methods)和非公开方法(unpublished methods)两个榜单。FDDB是早期评估各类人脸检测算法最重要的数据集之一。根据FDDB数据集召回率的计算方式不同,可以分为Discrete和Continuous两种评估方式。
该论文主要使用的是WIDER FACE数据集,正如图4和表1所示,根据在人脸上标注五个landmark(眼睛中心、鼻尖和嘴角)信息的难度不同,将人脸图像质量划分为五个等级。在训练集上标注了84.6k个landmark和在验证集上标注了18.5个landmark。
实验细节
Feature Pyramid. RetinaFace在$P_2-P_6$上使用Feature Pyramid,其中$P_2-P_5$来自于ResNet residual stage($C_2-C_5$),并使用top-down结构和侧连接。$P_6$是在$C_5$上使用stride=2的3x3的卷积得到,并使用“Xavier”方法初始化。
Context Module. 受到SSH和PyramidBox的启发,作者在五个feature pyramid levels上使用独立的context modules,增加感受视野并增强了刚性上下文建模能力(enhance the rigid context modelling power)。受到WIDER Face Challenge2018的冠军启发,作者还用可变形卷积网络(DCN)替换侧连接和上下文模块(context modules)内的所有3×3卷积层,进一步增强了非刚性上下文建模能力(strengthens the non-rigid context modelling capacity)。
Loss Head. 对于negative anchors,只计算分类损失。对于positive anchors,则计算所提出的multi-task loss。在不同的feature map $H_n \times W_n \times 256, n\in \{2, \cdots, 6\}$上应用共享loss head($1 \times 1$卷积),对于mesh decoder,作者使用了一个计算量很小的pre-trained模型。
Anchor Settings. 正如表2所示,在$P_2-P_6$不同的feature pyramid levels上应用特定尺度的anchors。其中,$P_2$被设计使用tiling small anchors捕捉tiny faces,这也带来了更大的计算量和更高的false positives风险。作者设计scale step为$2^{1/3}$,长宽比例为1:1。输入图像尺寸为$640 \times 640$,anchors的尺寸覆盖了feature pyramid levels上从$16 \times 16$到$406 \times 406$各个范围。这里总共有102300个anchors,其中75%的anchors来自$P_2$。
在训练过程中,如果anchors和ground-truth box的IoU大于0.5,则判定为anchors匹配上了该ground-truth box(若anchor匹配上了多个ground-truth box,则和有最大IoU的ground-truth box进行匹配);若anchor与所有的ground-truth box都小于 0.3,则判定该anchor为背景;在训练过程中,其余anchors被忽略。因为在matching step后,绝大部分的anchor(>99%)都是negative,我们使用标准的OHEM步骤减轻positive和negative训练样本之间的严重不平衡。具体来说,根据损失值将negative anchors进行排序,选择值比较大的一些,保证negative:positive至少为$3:1$。
Data Augmentation. 在WIDER FACE训练集中有大概20%的tiny faces。作者从原始图片中随机裁剪正方形的patches,然后resize这些patches到$640 \times 640$以产生更大training faces。具体来说,按照原始图像短边的$[0.3,1]$之间的随机大小从原始图像裁剪正方形patches。对于裁剪边界的faces,如果它的中心点落在crop patch中间,则保留face box的重叠部分。除了随机裁剪之外,我们还以0.5的概率随机水平翻转,photo-metric colour distortion。
Training Details. 在四块英伟达P40上使用SGD优化器训练RetinaFace(momentum at 0.9, weight decay at 0.0005, batch size of 8 × 4)。学习率从$10^{-3}$开始,在5个epoch后降低到$10^{-2}$,在第55和第68epoch时学习率均除以10。总共训练80个epoch。
Testing Details. 对于在WIDER FACE上的测试,按照标准的流程,使用翻转和multi-scale(图像的短边在[500,800,1100,1400,1700])策略。使用IoU阈值为0.4对预测出的face boxes应用Box voting策略。
Ablation Study
为了更好的理解RetinaFace,作者进一步作了关于标注的five facial landmarks和所提的dense regression branch的作用。使用的指标为在IoU=0.5时的AP和在IoU=0.5:0.05:0.95时的mAP,如下表所示。从中可以看出,通过使用FPN、context module、DCN等,作者得到了一个强有力的baseline,在Hard上的AP为91.286。通过添加five facial landmark regression,在Hard上的face box AP提升了0.408%,mAP提升了0.775%,说明了landmark信息对于人脸检测精度的提升有着重要的作用。另外,添加dense regression branch后,增加了在Easy和Medium上的AP,在Hard上的AP反而降低了,这表明在具有挑战性的场景下dense regression的难度。然而,若将这两者结合到一起,会进一步的提升在Hard上的AP。这表明landmark regression确实有助于dense regression,这反过来又进一步提高了人脸检测性能。
Face box Accuracy
如下所示,RetailFace在验证集、测试集的Easy、Medium、Hard上都取得了最高的AP。跟最近的SOTA方法对比,RetinaFace在有大量tiny faces的hard子集上取得了更高的得分(91.4% vs 90.3%)。
图6展示了一张人脸图像的定性结果。RetinaFace从真实的1151个人脸中成功找到了大约900个人脸(阈值为0.5)。除了精确的box外,RetinaFace预测的five face landmark在姿态、遮挡和分辨率等变化下也非常健壮。虽然在严重遮挡情况下出现dense face localisation失败的情况,但在一些清晰度较大的人脸上的dense regression结果是好的,甚至显示出表情变化。
推理速度
除了大网络(ResNet-152, size of 262MB, and AP 91.8% on the WIDER FACE hard set)外,作者还提出了一个轻量化模型(MobileNet-0.25,size of 1MB,and AP 78.2% on the WIDER FACE hard set)。对于轻量化模型,作者在输入图像上使用$7 \times 7$的卷积(stride=4),只在$P_3-P_5$上设置anchors,并且移除了DCN层。此外,固定了backbone的前两个卷积层,以实现更高的精度。
表5给出了两种模型在不同输入大小下的推理时间。作者省略了dense regression branch上的时间开销,因此推理时间与输入图像的人脸密度无关。作者利用TVM来加速模型推理,并分别在NVIDIA Tesla P40 GPU、Intel i7-6700K CPU和ARM RK3399上进行了实验。RetinaFace ResNet-152具有更高的精度,VGA图像(640×480)的运行速度为13FPS。相比之下,RetinaFace MobileNet-0.25是为高效的人脸检测而设计的,对于4K图像(4096×2160),在GPU上的速度为40FPS,对于高清图像(1920×1080),在多线程CPU上达到20FPS,对于VGA图像,在单线程CPU上达到60FPS(640×480)。另外,对于VGA图像(640×480)在ARM处理器上能够达到16 FPS。
总结
RetinaFace通过如下几种途径来提高WIDER FACE hard上的性能:
- 使用额外的landmark监督信息和3D position自监督信息
- 在特征金字塔上应用context module来扩大感受野,增强模型检测极小人脸的上下文推理能力
- 使用$P_2$来预测极小人脸
- 训练时的数据增强:从原始图片中随机裁剪正方形的patches,然后resize这些patches到$640 \times 640$以产生更大training faces。
参考
人脸检测之SSH(Single Stage Headless)
insightface新作:RetinaFace单阶段人脸检测